//package com.agile.leetcode.classloader;
//
//import com.agile.leetcode.AESandRSAandMd5.AESUtils;
//import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.IOException;
//
///**
// * @Author ChenZhangKun
// * @Date 2020/12/26 11:13
// */
//public class MyClassLoader extends ClassLoader {
//    // 类加载器名称
//    private String name;
//    // 扩展名
//    private static final String extension = ".class";
//    // 地址
//    private String path;
//
//    /**
//     * 指定其父加载器
//     * 将其委托为系统类加载器必备,如果不写，在将其指为系统类加载器时会报错：
//     * Error occurred during initialization of VM
//     *
//     * @param classLoader
//     */
//
//    public MyClassLoader(ClassLoader classLoader) {
//        super(classLoader);
//    }
//
//    public MyClassLoader(String name) {
//        super();
//        this.name = name;
//    }
//
//    public MyClassLoader(String name, ClassLoader classLoader) {
//        super(classLoader);
//        this.name = name;
//    }
//
//    public void setPath(String path) {
//        this.path = path;
//    }
//
//    @Override
//    protected Class<?> findClass(String name) throws ClassNotFoundException {
//        byte[] bytes = this.loadClassData(name);
//        if (bytes != null) {
//            return defineClass(name, bytes, 0, bytes.length);
//        }
//        return null;
//    }
//
//    public byte[] loadClassData(String name) {
//        // 取点.
//        name = name.replaceAll("\\.", "\\\\");
//
//        File file = new File(this.path + "\\" + name + extension);
//        if (file.exists()) {
//            FileInputStream in = null;
//            ByteOutputStream ont = null;
//            try {
//                in = new FileInputStream(file);
//                byte[] buffer = new byte[1024];
//                int len = 0;
//                ont=new ByteOutputStream();
//                while ((len = in.read(buffer)) != -1) {
//                    ont.write(buffer, 0, len);
//                }
//            } catch (IOException ex) {
//                ex.printStackTrace();
//            } finally {
//                try {
//                    if (in != null) {
//                    }
//                    in.close();
//                } catch (IOException ex) {
//                    ex.printStackTrace();
//                }
//            }
//            return ont.toByteArray();
//        }
//        return null;
//    }
//
//    public String getClassloderName() {
//        return this.name;
//    }
//
//    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
//        MyClassLoader myClassLoader = new MyClassLoader("myLoader");
//        myClassLoader.setPath("D:\\czk");
//        // 与包名一致
//        Class<?> aClass = myClassLoader.loadClass("com.agile.leetcode.AESandRSAandMd5.AESUtils");
//        AESUtils o = (AESUtils) aClass.newInstance();
//        System.out.println(o.getClass());
//        System.out.println(aClass.getClassLoader().getParent());
//        System.out.println(aClass.getClassLoader());
//    }
//}
//
